% $Id: introduction.nw 2532 2012-08-03 06:31:47Z jkoshy $
%
% The introduction to the build system.

\part{The Build System}\label{part.intro}

\chapter{Introduction}\label{chap.introduction}

\section{Design Goals}

\begin{goal}
  The system should support build and testing our source tree, on the
  target operating systems and machine architectures of our interest.
\end{goal}

This is the primary design goal for the tool, its
\foreignphrase{raison d'\^etre}.

\begin{goal}
  The system should support building and testing our source tree on
  non-native architectures (relative to the build host).
\end{goal}

Builds on non-native machine architectures and operating systems are
would involve the use of virtual machines and CPU emulators.  The
actual build will be done using \tool{make} or equivalent utility.

\begin{goal}
  The system should be easy to use.
\end{goal}

Defining a build needs to be intuitive, and should utilize
pre-existing tools where possible.

The number of new notations and file formats that a user needs to
learn should be kept to a minimum.

Invoking a build should be simple.  Sensible defaults should be used
to minimize the need for user input at the time of invocation.

\begin{goal}
  The system should be able to run entirely on a relatively power and
  resource constrained system such as a laptop, i.e., without needing
  a beefy build box, or architecture-specific hardware.
\end{goal}

The ability to be able to work using a low power compute platform is a
necessity in the project's current development environment

The need to be frugal in resource consumption rules out the use of
certain convenient but resource hungry implementation options.

\begin{goal}
  The system should work in ``offline'' mode, without requiring
  external network access to function.
\end{goal}

The intent is to be able to work in ``standalone'' mode, without
needing to contact a master server on the network.

\begin{goal}
  The system should allow a source tree that is in-development to be
  built and tested, prior to a check-in.
\end{goal}

This system is primarily a development aid, and not primarily a tool
for implementing continuous integration.

\begin{goal}
  The system should be easy to deploy, with the minimum of software
  dependencies.
\end{goal}

The fewer dependencies on third party packages, the easier it is to
support target operating systems.

\begin{goal}
  The utility should be easy to port to a new operating system.
\end{goal}

This goal is meant to reduce the effort needed to support new
operating systems.
